package main.合并区间;

import java.util.Arrays;

/**
 * @author tmh
 * @date 2024/7/10 19:41
 * @description
 */
public class T56合并区间 {
    public int[][] merge(int[][] intervals) {
        //1.先让原来区间里面的所有数组按照数组里面的第一个元素进行排序
        Arrays.sort(intervals, (x, y) -> x[0] - y[0]);
        //2.获取原来数组里面的长度
        int length = intervals.length;
        //3.构造一个新数组
        int[][] merge = new int[length][2];
        //4.定义一个index来移动操作merge数组里面的元素
        int index = 0;
        merge[0] = intervals[0];
        //5.从下标为1开始遍历原来的数组
        for (int i = 1; i < intervals.length; i++) {
            //如果数组里面的第二个元素大于merge数组里面的第一个元素，那么就直接把这个元素加入merge里面
            //这里的index是先++，在这里犯了一点错误
            if (intervals[i][0] > merge[index][1]) {
                merge[++index] = intervals[i];
            } else {
                //比较两个数组里面的右面元素的值，看哪个大一点，让max来代替merge数组里面index位置这个
                //数组右面的元素（即就是第二个元素的值）
                int max = Math.max(intervals[i][1], merge[index][1]);
                merge[index][1] = max;
            }
        }
        //把merge里面的元素拷贝到新数组里面去，因为初始化的时候，merge数组的长度是原来数组的长度
        return Arrays.copyOf(merge,index+1);
    }
}
